home *** CD-ROM | disk | FTP | other *** search
/ PC Zone 88 / PCZONE#88APR00.iso / Unreal Tournament / Mutators / utpool200.umod < prev   
INI File  |  2000-02-02  |  38KB  |  821 lines

  1. [Setup]
  2. Product=UTPool
  3. Version=200
  4. Archive=UTPool200.umod
  5. SrcPath=.
  6. MasterPath=..
  7. Requires=UnrealTournament400Requirement
  8. Group=SetupGroup
  9. Group=umodINIGroup
  10. Group=UTPool200Group
  11. Group=umodIncludeFilesGroup
  12.  
  13. [UnrealTournament400Requirement]
  14. Product=UnrealTournament
  15. Version=400
  16.  
  17. [SetupGroup]
  18. Copy=(Src=System\Manifest.ini,Master=System\Manifest.ini,Size=580,Flags=3)
  19. Copy=(Src=System\Manifest.int,Master=System\Manifest.int,Size=451,Flags=3)
  20.  
  21. [umodINIGroup]
  22. Ini=System\UnrealTournament.ini,Engine.GameEngine.ServerPackages=UTPool
  23.  
  24. [UTPool200Group]
  25. File=(Src=System\UTPool.u,Size=33397)
  26. File=(Src=System\UTPool.int,Size=799)
  27.  
  28. [umodIncludeFilesGroup]
  29. File=(Src=Help\UTPool200.txt,Size=2354)
  30.  
  31. [Setup]
  32. LocalProduct=UTPool
  33. ReadMe=Help\UTPool200.txt
  34. SetupWindowTitle=UTPool v200 installation
  35. AutoplayWindowTitle=UTPool Options
  36. ProductURL=None yet
  37. VersionURL=none yet
  38. Developer={KiX}ProfessorGib
  39. DeveloperURL=none yet
  40.  
  41. [UnrealTournament400Requirement]
  42. LocalProduct=UnrealTournament
  43. ProductURL=http://www.unrealtournament.com/
  44. VersionURL=http://unreal.epicgames.com/
  45. Developer=Epic Games, Inc.
  46. DeveloperURL=http://www.epicgames.com/
  47. ┴â*₧D╛@Ä╓y^¢vá└└£R╡╙îoα)Mó╦Ä╛NoneSystemUTPoolCoreEngine
  48. ExplosionBotpackBroadcastLocalizedMessageBlowUpspin FireRocketsMyDamageTypespeedFlying TakeDamage    MaxSpeedHitWallAsylumCueBall
  49. pooldeathCueBallExplode BeginStateTickBeginTimerAbouncedeathDamage Apooldeath RocketPack PlayRFiringPawn AmmoStringWeaponString CheckTargetUT_EightballMomentumTransferAltProjectileClassProjectileClass    AmmoName    LightHueDefaultWeapon bouncedeath PlayRecoil WeaponName    ItemName ReplaceWith AdjustToss SoundPitch LightRadius
  50. LightType
  51. AltFiring AmbientGlowCheckReplacementbFixedRotationDir
  52. AdjustAimDeathMessageProcessTouchPickupMessageGibbedPickupAmmoCount SoundRadiusAsylumBouncersBroadcastRegularDeathMessage AsylumPoolAsylumRocketsfastbouncersInsaneAsylumCueBallArenabAlwaysInstantPoolGrenadeDeath RocketDeath EradicatedRedeemerDeath
  53. NameColorWeaponDescription FiringSpeedbInstantRocketColorBouncyRockets bRapidFire ReturnValueStateCalcDrawOffset
  54. DeltaTimeG    FunctionAltProjectileSpeedDynamicLoadObject BestTarget HitLocation TextBuffer
  55. HitNormalProjectileSpeedROtherKiller    aimerrorDamageAmount bWarnTargetNetModeMutatorWeaponbSuperRelevant PlayerOwner
  56. PawnOwner
  57. LevelInfoRole
  58. bPointingbAltWarnTarget
  59. bLockedOnDeathMessageClassPackagebDamageTriggeredRotator    LocationSoundDampeningViewRotation AdjustedAimPlayerReplicationInfoOwner HurtRadius FireOffsetS DamageType
  60. InventoryClassPropertyNamePropertyObjectPropertyFloatPropertyLeveltrailVel2DAngleRocketsLoaded
  61. RocketRad
  62. bFireLoad
  63. bTightWadLockedTargetFireLocation    StartLocFireRot DupRocketsRandRot
  64. bHitWater
  65. SmokeRateSeekingbRing bWaterStartNumExtraRockets NumWallHitsbCanHitInstigatorBoolProperty    GameInfoMoverActorVectorArena PlayerPawnClass ProjectileYawTournamentGameInfo
  66. BlastMark
  67. WallCrackut_seekingrocketUT_SpriteBallExplosion RocketTrail
  68. RocketMk2EradicatedDeathMessageWallRedeemerClass ImpactSound ScriptText    bRotatedbPendingLockbMultiRocketsNorm2D IntPropertyYObjectZXSkillStructStructPropertyByteProperty RemoteRole    Velocity Instigator8Çê;Çê7Çê:Çê&(êêÇåêê9å0åÇûiYA        #          █▌≡≡ûäsB╞»Æ╘√Rªen≈╝æyr╥»ä·⌐¼    ä·⌐¼    ä·⌐¼    à $╚D$ßD$≡A#" N )3 /╚'E05SÇåûKXO        #              ╡a╥fûäsB╞»Æ╘√Rªen≈╝æyr╥»ä·⌐¼    ä·⌐¼    ä·⌐¼    ä·⌐¼    à $ûD$»D$ B#"@£ 3 </╚'º0
  69. 5S{ô ê}ôêê
  70. êJE@        #          .║~r╡a╥fæyr╥»ä·⌐¼    à $╚D$ßD BMF=        #          ∞Γ>ª█▌≡≡æyr╥»ä·⌐¼    à $·D$Ç    E 1?"ê4ê'Çäê1ê$ÖçT        Ç          2%τ6┬ç╒:åªTî╘åªTî╘åªTî╘ä·⌐¼    åªTî╘åªTî╘åªTî╘ä·⌐¼    åªTî╘Ö╓ZφÖ╓ZφÖ╓Zφ╡a╥f╡a╥f╡a╥f█▌≡≡█▌≡≡█▌≡≡àM╙D╙K]! Classification: Heavy BallisticP╙%$7]-,%k laid down the SmAcK upon %o with the %w.J*N  9]You got the Cueball.,]    Cueball.Çê=#+Ö*êå-ê«/êIÇäK5ê6êêÇäÇä«ÇäÇäF åLÇ䪪AÇêCÇêg%`I        Ç          2G½Å%τ6┬åªTî╘åªTî╘åªTî╘ä·⌐¼    åªTî╘åªTî╘åªTî╘ä·⌐¼    åªTî╘Ö╓ZφÖ╓ZφÖ╓Zφ.║~r.║~r.║~r∞Γ>ª∞Γ>ª∞Γ>ªà;"
  71. L$ÜÖ┘?%$7]10%k dished out the insanity upon %o with the %w.9]You got the pSyChO_BaLL.,= PsYcHoBaLLÇêyÇHÇäupÇq╕HQE                  O%l¬Q╕1╣≥pä·⌐¼    ä·⌐¼    àc█24    8]I$Qé2a/!"ü2a/!-2UTPool.CueBall(I$' ┘l].åír*  *╝0.«íôÉ&lû%%òr0*-ö░½├?,┴σ ▒1/-"╫╫╫╫í Ä╜╒6─½1╒6┼½/╒6ò½-A-ƒÿ ╛"D│'-╞mÿ .╗"D│'-╚îw0*ÿ ▒ôÉ&íb└╤ü-ƒù*-╡("wù*..å!éwù*wù.ù*-╡(".*-╬(-═'ÿ&Ç@iä-ö    ü-ƒ&α@-?ùÉ&KùÉ%Σ-?╪╫╪"╒»½╗&≡@/╒»½╝&?,-╘╘1?,├∩"»-ƒª▒?%Gé░?,    ü-ö6¢D»?6¢ÿ½?Xªæé▒`@    ü-ö6¢D«?6¢ÿ½»?,?Xª6¢6¢ÿ&wù*#a Ö !#╒ù#╙#▒?%▌# ì«fff?½═╠L>├¼)a  !)FÇéùÉ,-ö)-P'¼▒?%▌) ì«fff?½═╠L>├5$a  !$K    éùÉ,-ö$-M'5▒?%▌$ ì«fff?½═╠L>├╕∙1å?ªÉx-ö(-╟( ▐ddùÉ%q!
  72.  ╦ZR
  73. }!           @ÇêNÇê╤]\L4*╖¼4Cñ?ó\bÇ? ºmDg
  74.           ºnCc%              ╨S2
  75. ╣          ║a pW-<'a╢$@a!    Ç?¢éw.æ;*.æ;-▓ÄÜ:░:$;*D¼¬Ä╒?óΓìñÄ Ña(bÜÖÖ>╩ù,Ä6Ü&a ¡ ÄPì6ò 6ò  Γ Γ6░█ w╛┐Γ╫╒ÜÖ? 6ò  Γ 6░█ w╛┐╧ܺ&%╫#═╠L=Θ╪#═╠L=ܺ&%╫#═╠L=)╪#═╠L=Γαì╒½?,█ì Çê║x≈W-3'a╢$@a!    Ç?¢éw.æ8*.æ8-▓ÄÜ:░:$8*D¼¬Ä╒?óΓìñÄ Ña(bÜÖÖ>╩ù,Ä6Ü&a ¡ ÄPì6ò6òΓΓ6░█w╛┐Γ╫╒ÜÖ?6òΓ6░█w╛┐╧ܺ&%╫#═╠L=Θ╪#═╠L=ܺ&%╫#═╠L=)╪#═╠L=Γαì╒½?,█ì O_t?                  ^nëÆO%l¬Qä·⌐¼    ä·⌐¼    àv    //=======================================================================
  76. //AsylumPool. Makes rockets bounce around like razor blades. With each bounce, their damage is increased. They are speedier than normal bouncy rockets and have a strobe light.
  77. //=======================================================================
  78.  
  79. class AsylumPool expands Pool;
  80.  
  81. function bool CheckReplacement(Actor Other, out byte bSuperRelevant)
  82. {
  83. bSuperRelevant = 0;
  84. if( Other.IsA('UT_EightBall') && !Other.IsA('AsylumCueBall') )
  85. {
  86. ReplaceWith( Other, "UTPool.AsylumCueBall" );
  87. return false;
  88. }
  89. bSuperRelevant = 0;
  90. return TRUE;
  91. }
  92.  
  93. w4class AsylumCueBall extends CueBall;
  94.  
  95. state AltFiring
  96. {
  97.     function Tick( float DeltaTime )
  98.     {
  99.         if (RocketsLoaded > 0)  //makes alt fire instant
  100.              GoToState('FireRockets');
  101.     }
  102. }
  103.  
  104. ///////////////////////////////////////////////////////
  105.  
  106. state FireRockets
  107. {
  108.     function BeginState()
  109.     {
  110.         local vector FireLocation, StartLoc, X,Y,Z;
  111.         local rotator FireRot, RandRot;
  112.         local AsylumRockets r;
  113.         local UT_SeekingRocket s;
  114.         local AsylumBouncers g;
  115.         local float Angle, RocketRad;
  116.         local pawn BestTarget, PawnOwner;
  117.         local PlayerPawn PlayerOwner;
  118.         local int DupRockets;
  119.         local bool bMultiRockets;
  120.  
  121.         PawnOwner = Pawn(Owner);
  122.         if ( PawnOwner == None )
  123.             return;
  124.         PawnOwner.PlayRecoil(FiringSpeed);
  125.         PlayerOwner = PlayerPawn(Owner);
  126.         Angle = 0;
  127.         DupRockets = RocketsLoaded - 1;
  128.         if (DupRockets < 0) DupRockets = 0;
  129.         if ( PlayerOwner == None )
  130.             bTightWad = ( FRand() * 4 < PawnOwner.skill );
  131.  
  132.         GetAxes(PawnOwner.ViewRotation,X,Y,Z);
  133.         StartLoc = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; 
  134.  
  135.         if ( bFireLoad )         
  136.             AdjustedAim = PawnOwner.AdjustAim(ProjectileSpeed, StartLoc, AimError, True, bWarnTarget);
  137.         else 
  138.             AdjustedAim = PawnOwner.AdjustToss(AltProjectileSpeed, StartLoc, AimError, True, bAltWarnTarget);    
  139.             
  140.         if ( PlayerOwner != None )
  141.             AdjustedAim = PawnOwner.ViewRotation;
  142.         
  143.         PlayRFiring(RocketsLoaded-1);        
  144.         Owner.MakeNoise(PawnOwner.SoundDampening);
  145.         if ( !bFireLoad )
  146.         {
  147.             LockedTarget = None;
  148.             bLockedOn = false;
  149.         }
  150.         else if ( LockedTarget != None )
  151.         {
  152.             BestTarget = Pawn(CheckTarget());
  153.             if ( (LockedTarget!=None) && (LockedTarget != BestTarget) ) 
  154.             {
  155.                 LockedTarget = None;
  156.                 bLockedOn=False;
  157.             }
  158.         }
  159.         else 
  160.             BestTarget = None;
  161.         bPendingLock = false;
  162.         bPointing = true;
  163.         FireRot = AdjustedAim;
  164.         RocketRad = 4;
  165.         if (bTightWad || !bFireLoad) RocketRad=7;
  166.         bMultiRockets = ( RocketsLoaded > 1 );
  167.         While ( RocketsLoaded > 0 )
  168.         {
  169.             if ( bMultiRockets )
  170.                 Firelocation = StartLoc - (Sin(Angle)*RocketRad - 7.5)*Y + (Cos(Angle)*RocketRad - 7)*Z - X * 4 * FRand();
  171.             else
  172.                 FireLocation = StartLoc;
  173.             if (bFireLoad)
  174.             {
  175.                 if ( Angle > 0 )
  176.                 {
  177.                     if ( Angle < 3 && !bTightWad)
  178.                         FireRot.Yaw = AdjustedAim.Yaw - Angle * 600;
  179.                     else if ( Angle > 3.5 && !bTightWad)
  180.                         FireRot.Yaw = AdjustedAim.Yaw + (Angle - 3)  * 600;
  181.                     else
  182.                         FireRot.Yaw = AdjustedAim.Yaw;
  183.                 }
  184.                 if ( LockedTarget != None )
  185.                 {
  186.                     s = Spawn( class 'ut_SeekingRocket',, '', FireLocation,FireRot);
  187.                     s.Seeking = LockedTarget;
  188.                     s.NumExtraRockets = DupRockets;                    
  189.                     if ( Angle > 0 )
  190.                         s.Velocity *= (0.9 + 0.2 * FRand());            
  191.                 }
  192.                 else 
  193.                 {
  194.                     r = Spawn( class'AsylumRockets',, '', FireLocation,FireRot);
  195.                     r.NumExtraRockets = DupRockets;
  196.                     if (RocketsLoaded>4 && bTightWad) r.bRing=True;
  197.                     if ( Angle > 0 )
  198.                         r.Velocity *= (0.9 + 0.2 * FRand());            
  199.                 }
  200.             }
  201.             else 
  202.             {
  203.                 g = Spawn( class'AsylumBouncers',, '', FireLocation,FireRot);
  204.                 g.NumExtraRockets = DupRockets;
  205.                 if (RocketsLoaded>4 && bTightWad) g.bRing=True;
  206.                 if ( Angle > 0 )
  207.                     g.Velocity *= (0.9 + 0.2 * FRand());
  208.             }
  209.  
  210.             Angle += 1.0484; //2*3.1415/6;
  211.             RocketsLoaded--;
  212.         }
  213.         bTightWad=False;
  214.         bRotated = false;
  215.     }
  216.  
  217.     
  218. Begin:    
  219. }
  220.  
  221. ╓ 8êå a/!Uér ¬    ù%'Γ╪'  Äååw ¬'Γ╪'  Ä Zw2
  222. ║          hÇP⌐zA                  6fÆóï⌐┴┘0╣åªTî╘åªTî╘åªTî╘åªTî╘åªTî╘åªTî╘åªTî╘åªTî╘åªTî╘åªTî╘åªTî╘åªTî╘åªTî╘åªTî╘åªTî╘åªTî╘ë▓┘={åªTî╘åªTî╘à╧<k$class fastbouncers extends rocketmk2;
  223.  
  224.  
  225. var float SmokeRate,damageamount;
  226. var bool bRing,bHitWater,bWaterStart,bCanHitInstigator;
  227. var int NumExtraRockets;
  228. var    rockettrail trail;
  229. var int NumWallHits;
  230.  
  231.  
  232.  
  233. auto state Flying
  234. {
  235.     
  236.     simulated function ProcessTouch (Actor Other, Vector HitLocation)
  237.     {    
  238.         if (Other.IsA('Pawn') )
  239.             Explode(HitLocation,Normal(HitLocation-Other.Location) );
  240.     }
  241.     simulated function HitWall (vector HitNormal, actor Wall)
  242.     {
  243.         local vector Vel2D, Norm2D;
  244.  
  245.         bCanHitInstigator = true;
  246.         PlaySound(ImpactSound, SLOT_Misc, 2.0);
  247.         LoopAnim('Spin',1.0);
  248.         if ( (Mover(Wall) != None) && Mover(Wall).bDamageTriggered )
  249.         {
  250.             if ( Role == ROLE_Authority )
  251.                 Wall.TakeDamage( Damage, instigator, Location, MomentumTransfer * Normal(Velocity), MyDamageType);
  252.             Explosion(location);
  253.             return;
  254.         }
  255.         NumWallHits++;
  256.         SetTimer(0, False);
  257.         MakeNoise(0.3);
  258.         if ( NumWallHits > 18 )
  259.             Explosion(location);
  260.             
  261.  
  262.         if ( NumWallHits == 1 ) 
  263.         {
  264.             Spawn(class'WallCrack',,,Location, rotator(HitNormal));
  265.             Vel2D = Velocity;
  266.             Vel2D.Z = 0;
  267.             Norm2D = HitNormal;
  268.             Norm2D.Z = 0;
  269.             Norm2D = Normal(Norm2D);
  270.             Vel2D = Normal(Vel2D);
  271.             if ( (Vel2D Dot Norm2D) < -0.999 )
  272.             {
  273.                 HitNormal = Normal(HitNormal + 0.6 * Vel2D);
  274.                 Norm2D = HitNormal;
  275.                 Norm2D.Z = 0;
  276.                 Norm2D = Normal(Norm2D);
  277.                 if ( (Vel2D Dot Norm2D) < -0.999 )
  278.                 {
  279.                     if ( Rand(1) == 0 )
  280.                         HitNormal = HitNormal + vect(0.05,0,0);
  281.                     else
  282.                         HitNormal = HitNormal - vect(0.05,0,0);
  283.                     if ( Rand(1) == 0 )
  284.                         HitNormal = HitNormal + vect(0,0.05,0);
  285.                     else
  286.                         HitNormal = HitNormal - vect(0,0.05,0);
  287.                     HitNormal = Normal(HitNormal);
  288.                 }
  289.             }
  290.         }
  291.         Velocity -= 2 * (Velocity dot HitNormal) * HitNormal;  
  292.  
  293.     }
  294.         function BlowUp(vector HitLocation)
  295.     {    
  296.         
  297.         HurtRadius(Damage,180.0, MyDamageType, MomentumTransfer, HitLocation );
  298.         MakeNoise(1.0);
  299.     }    
  300.  
  301.     simulated function Timer()
  302.     {
  303.         bCanHitInstigator = true;
  304.     }
  305.  
  306. simulated function Explosion(vector HitLocation)
  307. {
  308.     local UT_SpriteBallExplosion s;
  309.  
  310.     BlowUp(HitLocation);
  311.     
  312.         if ( Level.NetMode != NM_DedicatedServer )
  313.     {
  314.         spawn(class'Botpack.BlastMark',,,,rot(16384,0,0));
  315.           s = spawn(class'UT_SpriteBallExplosion',,,HitLocation);
  316.         s.RemoteRole = ROLE_None;
  317.     }
  318.      Destroy();
  319. }
  320. }
  321.  
  322. R!q] .åír *  *╝9.«íôÉ&lû%%òr9*-ö░½├?, ┴σ  ▒456╫╫╫╫í Ä╜╒6─½4╒6┼½5╒6ò½6A-ƒÿ  ╛D│'-╞mÿ  .╗D│'-╚îw9*ÿ  ▒ôÉ&íb └╤ü-ƒù*-╡("wù*=.å!éwù*wù=ù*-╡("=*-╬(-═'ÿ(Ç@iä-ö    ü-ƒ(α@-BùÉ&KùÉ%Σ-B!╪╫╪╒»½╗(≡@5╒»½╝(?,6╘╘4?,├∩!»-ƒª▒?%Gé░?,    ü-ö6¢D»?6¢ÿ½?Xªæé▒`@    ü-ö6¢D«?6¢ÿ½»?,?Xª6¢6¢ÿ&wù**a Ö !!*╒ù*╙#▒?%▌* ì«fff?½═╠L>├¼,a  !!,FÇéùÉ,-ö,-P'¼▒?%▌, ì«fff?½═╠L>├5+a  !!+K    éùÉ,-ö+-M'5▒?%▌+ ì«fff?½═╠L>├╕∙1å?ªÉx-ö(-╟( ╤lV>·P&û,N½áA?ÆÉ,&╖N>Cñ?óVbÇ? [    ªW-<'a╢$@a!    Ç?¢éw.æ:*.æ:-▓ÄÜ:░:$:*D¼¬Ä╒?óΓìñÄ Ña(bÜÖÖ>╩ù,Ä6Ü&a ¡ ÄPì6ò
  323. 6ò
  324. 
  325. Γ
  326. Γ6░█
  327. w╛┐Γ╫╒ÜÖ?
  328. 6ò
  329. 
  330. Γ
  331. 6░█
  332. w╛┐╧ܺ&%╫#═╠L=Θ╪#═╠L=ܺ&%╫#═╠L=)╪#═╠L=Γαì╒½?,█ì eoMÇr3ÇQ>4    ┤cL$Wé>a/!"ü>a/!->UTPool.AsylumCueBall(L$' ╧┤@B                  vΣM¿┘┤┼╘▒à+& ]UTPool.AsylumCueBall]Botpack.RocketPack(GSseùÉ%q!
  333.  ╓J8986Ja/!HΓ╪HJ Ä ÇOclass pooldeath extends TournamentGameInfo;
  334.  
  335. function BroadcastRegularDeathMessage(pawn Killer, pawn Other, name damageType)
  336. {
  337.     if (damageType == 'RedeemerDeath')
  338.     {
  339.         if ( RedeemerClass == None )
  340.             RedeemerClass = class<Weapon>(DynamicLoadObject("Botpack.Warheadlauncher", class'Class'));
  341.         BroadcastLocalizedMessage(DeathMessageClass, 0, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, RedeemerClass);
  342.     }
  343.     else if (damageType == 'Eradicated')
  344.         BroadcastLocalizedMessage(class'EradicatedDeathMessage', 0, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, None);
  345.     else if ((damageType == 'RocketDeath') || (damageType == 'GrenadeDeath'))
  346.         BroadcastLocalizedMessage(DeathMessageClass, 0, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, class'UT_Eightball');
  347.     else if (damageType == 'Gibbed')
  348.         BroadcastLocalizedMessage(DeathMessageClass, 8, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, None);
  349.     else if ((damageType == 'pooldeath') || (damageType == 'bouncedeath'))
  350.         BroadcastLocalizedMessage(DeathMessageClass, 0, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, class'Cueball');
  351.     else if ((damageType == 'Apooldeath') || (damageType == 'Abouncedeath'))
  352.         BroadcastLocalizedMessage(DeathMessageClass, 0, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, class'AsylumCueBall');
  353.  
  354.     else {
  355.         if (Killer.Weapon != None)
  356.             BroadcastLocalizedMessage(DeathMessageClass, 0, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, Killer.Weapon.Class);
  357.         else
  358.             BroadcastLocalizedMessage(DeathMessageClass, 0, Killer.PlayerReplicationInfo, Other.PlayerReplicationInfo, None);
  359.     }
  360. }
  361.  
  362.  
  363.  
  364. )ôt//=======================================================================
  365. //Pool. Makes rockets bounce around like razor blades.
  366. //=======================================================================
  367. class CueBallArena expands arena;
  368.  
  369. ,ô┤|C                  ~vg┤┼╘▒à+& MUTPool.CueBall]Botpack.RocketPack(%p4class CueBall extends UT_Eightball;
  370.  
  371. state AltFiring
  372. {
  373.     function Tick( float DeltaTime )
  374.     {
  375.         if (RocketsLoaded > 0)  //makes alt fire instant
  376.              GoToState('FireRockets');
  377.     }
  378. }
  379.  
  380. ///////////////////////////////////////////////////////
  381. state FireRockets
  382. {
  383.     function BeginState()
  384.     {
  385.         local vector FireLocation, StartLoc, X,Y,Z;
  386.         local rotator FireRot, RandRot;
  387.         local bouncyrockets r;
  388.         local UT_SeekingRocket s;
  389.         local fastbouncers g;
  390.         local float Angle, RocketRad;
  391.         local pawn BestTarget, PawnOwner;
  392.         local PlayerPawn PlayerOwner;
  393.         local int DupRockets;
  394.         local bool bMultiRockets;
  395.  
  396.         PawnOwner = Pawn(Owner);
  397.         if ( PawnOwner == None )
  398.             return;
  399.         PawnOwner.PlayRecoil(FiringSpeed);
  400.         PlayerOwner = PlayerPawn(Owner);
  401.         Angle = 0;
  402.         DupRockets = RocketsLoaded - 1;
  403.         if (DupRockets < 0) DupRockets = 0;
  404.         if ( PlayerOwner == None )
  405.             bTightWad = ( FRand() * 4 < PawnOwner.skill );
  406.  
  407.         GetAxes(PawnOwner.ViewRotation,X,Y,Z);
  408.         StartLoc = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; 
  409.  
  410.         if ( bFireLoad )         
  411.             AdjustedAim = PawnOwner.AdjustAim(ProjectileSpeed, StartLoc, AimError, True, bWarnTarget);
  412.         else 
  413.             AdjustedAim = PawnOwner.AdjustToss(AltProjectileSpeed, StartLoc, AimError, True, bAltWarnTarget);    
  414.             
  415.         if ( PlayerOwner != None )
  416.             AdjustedAim = PawnOwner.ViewRotation;
  417.         
  418.         PlayRFiring(RocketsLoaded-1);        
  419.         Owner.MakeNoise(PawnOwner.SoundDampening);
  420.         if ( !bFireLoad )
  421.         {
  422.             LockedTarget = None;
  423.             bLockedOn = false;
  424.         }
  425.         else if ( LockedTarget != None )
  426.         {
  427.             BestTarget = Pawn(CheckTarget());
  428.             if ( (LockedTarget!=None) && (LockedTarget != BestTarget) ) 
  429.             {
  430.                 LockedTarget = None;
  431.                 bLockedOn=False;
  432.             }
  433.         }
  434.         else 
  435.             BestTarget = None;
  436.         bPendingLock = false;
  437.         bPointing = true;
  438.         FireRot = AdjustedAim;
  439.         RocketRad = 4;
  440.         if (bTightWad || !bFireLoad) RocketRad=7;
  441.         bMultiRockets = ( RocketsLoaded > 1 );
  442.         While ( RocketsLoaded > 0 )
  443.         {
  444.             if ( bMultiRockets )
  445.                 Firelocation = StartLoc - (Sin(Angle)*RocketRad - 7.5)*Y + (Cos(Angle)*RocketRad - 7)*Z - X * 4 * FRand();
  446.             else
  447.                 FireLocation = StartLoc;
  448.             if (bFireLoad)
  449.             {
  450.                 if ( Angle > 0 )
  451.                 {
  452.                     if ( Angle < 3 && !bTightWad)
  453.                         FireRot.Yaw = AdjustedAim.Yaw - Angle * 600;
  454.                     else if ( Angle > 3.5 && !bTightWad)
  455.                         FireRot.Yaw = AdjustedAim.Yaw + (Angle - 3)  * 600;
  456.                     else
  457.                         FireRot.Yaw = AdjustedAim.Yaw;
  458.                 }
  459.                 if ( LockedTarget != None )
  460.                 {
  461.                     s = Spawn( class 'ut_SeekingRocket',, '', FireLocation,FireRot);
  462.                     s.Seeking = LockedTarget;
  463.                     s.NumExtraRockets = DupRockets;                    
  464.                     if ( Angle > 0 )
  465.                         s.Velocity *= (0.9 + 0.2 * FRand());            
  466.                 }
  467.                 else 
  468.                 {
  469.                     r = Spawn( class'bouncyrockets',, '', FireLocation,FireRot);
  470.                     r.NumExtraRockets = DupRockets;
  471.                     if (RocketsLoaded>4 && bTightWad) r.bRing=True;
  472.                     if ( Angle > 0 )
  473.                         r.Velocity *= (0.9 + 0.2 * FRand());            
  474.                 }
  475.             }
  476.             else 
  477.             {
  478.                 g = Spawn( class'fastbouncers',, '', FireLocation,FireRot);
  479.                 g.NumExtraRockets = DupRockets;
  480.                 if (RocketsLoaded>4 && bTightWad) g.bRing=True;
  481.                 if ( Angle > 0 )
  482.                     g.Velocity *= (0.9 + 0.2 * FRand());
  483.             }
  484.  
  485.             Angle += 1.0484; //2*3.1415/6;
  486.             RocketsLoaded--;
  487.         }
  488.         bTightWad=False;
  489.         bRotated = false;
  490.     }
  491.  
  492.     
  493. Begin:    
  494. }
  495.  
  496. r//=======================================================================
  497. //TheInsaneAsylum. Makes rockets bounce around like razor blades. With each bounce, their damage is increased. They are speedier than normal bouncy rockets and have a strobe light.
  498. //=======================================================================
  499. class InsaneAsylum expands arena;
  500.  
  501. ▌    >äay■!IIr╣*╣ë╫Botpack.Warheadlauncher ¥ú%    ÆÆ╣_┤■!H ┌%    ÆÆ*_ä■!G■!Fú%    ÆÆ ç_@■!:ú,    ÆÆ*_Éä■!■!)ú%    ÆÆ %_αä■!■!ú%    ÆÆ G_6w    ┬*ú%    ÆÆ    ┬▄_ú%    ÆÆ* ╥WR║
  502. -3' BEY5eE`¢:├╔:$a ╘ "@Ca ª EC┐$a ╥Ne≥    
  503. -<' XkCª          YLF░          ]
  504. ¿W-3'a╢$@a!    Ç?¢éw.æ7*.æ7-▓ÄÜ:░:$7*D¼¬Ä╒?óΓìñÄ Ña(bÜÖÖ>╩ù,Ä6Ü&a ¡ ÄPì6ò6òΓΓ6░█w╛┐Γ╫╒ÜÖ?6òΓ6░█w╛┐╧ܺ&%╫#═╠L=Θ╪#═╠L=ܺ&%╫#═╠L=)╪#═╠L=Γαì╒½?,█ì n//=======================================================================
  505. //Pool. Makes rockets bounce around like razor blades.
  506. //=======================================================================
  507.  
  508. class Pool expands mutator;
  509.  
  510. function bool CheckReplacement(Actor Other, out byte bSuperRelevant)
  511. {
  512. bSuperRelevant = 0;
  513. if( Other.IsA('UT_EightBall') && !Other.IsA('CueBall') )
  514. {
  515. ReplaceWith( Other, "UTPool.CueBall" );
  516. return false;
  517. }
  518. bSuperRelevant = 0;
  519. return TRUE;
  520. }
  521.  
  522. Tbj
  523. ~(           jclass asylumrockets extends bouncyrockets;
  524.  
  525. auto state flying
  526. {
  527. simulated function HitWall (vector HitNormal, actor Wall)
  528.     {
  529.         local vector Vel2D, Norm2D;
  530.  
  531.         bCanHitInstigator = true;
  532.         PlaySound(ImpactSound, SLOT_Misc, 2.0);
  533.         LoopAnim('Spin',1.0);
  534.         if ( (Mover(Wall) != None) && Mover(Wall).bDamageTriggered )
  535.         {
  536.             if ( Role == ROLE_Authority )
  537.                 Wall.TakeDamage( Damage, instigator, Location, MomentumTransfer * Normal(Velocity), MyDamageType);
  538.             Explosion(location);
  539.             return;
  540.         }
  541.         NumWallHits++;
  542.         SetTimer(0, False);
  543.         MakeNoise(0.3);
  544.         if ( NumWallHits > 6 )
  545.             Explosion(location);
  546.             
  547.  
  548.         if ( NumWallHits == 1 ) 
  549.         {
  550.             Spawn(class'WallCrack',,,Location, rotator(HitNormal));
  551.             Vel2D = Velocity;
  552.             Vel2D.Z = 0;
  553.             Norm2D = HitNormal;
  554.             Norm2D.Z = 0;
  555.             Norm2D = Normal(Norm2D);
  556.             Vel2D = Normal(Vel2D);
  557.             if ( (Vel2D Dot Norm2D) < -0.999 )
  558.             {
  559.                 HitNormal = Normal(HitNormal + 0.6 * Vel2D);
  560.                 Norm2D = HitNormal;
  561.                 Norm2D.Z = 0;
  562.                 Norm2D = Normal(Norm2D);
  563.                 if ( (Vel2D Dot Norm2D) < -0.999 )
  564.                 {
  565.                     if ( Rand(1) == 0 )
  566.                         HitNormal = HitNormal + vect(0.05,0,0);
  567.                     else
  568.                         HitNormal = HitNormal - vect(0.05,0,0);
  569.                     if ( Rand(1) == 0 )
  570.                         HitNormal = HitNormal + vect(0,0.05,0);
  571.                     else
  572.                         HitNormal = HitNormal - vect(0,0.05,0);
  573.                     HitNormal = Normal(HitNormal);
  574.                 }
  575.             }
  576.         }
  577.         Velocity -= 2 * (Velocity dot HitNormal) * HitNormal;  
  578.  
  579.     }
  580.  
  581. function BlowUp(vector HitLocation)
  582.     {
  583.         local float damageamount;
  584.         if (numwallhits <4)
  585.             damageamount = 20 * (numwallhits * 2 + 1);
  586.         HurtRadius(DamageAmount,190.0, MyDamageType, MomentumTransfer, HitLocation );
  587.         MakeNoise(1.0);
  588.     }
  589. }
  590. Z(//==================================================================
  591. //Bouncy Rockets are like rockets only they bounce around like razor blades.
  592. //==================================================================
  593.  
  594. class BouncyRockets extends rocketmk2;
  595.  
  596.  
  597. var float SmokeRate, DamageAmount;
  598. var bool bRing,bHitWater,bWaterStart,bCanHitInstigator;
  599. var int NumExtraRockets;
  600. var    rockettrail trail;
  601. var int NumWallHits;
  602.  
  603.  
  604.  
  605.  
  606. auto state Flying
  607. {
  608.     simulated function ProcessTouch (Actor Other, Vector HitLocation)
  609.     {    
  610.         if (other.isa('Pawn'))
  611.         {    if ((other == instigator) && (numwallhits > 0))
  612.                  Explode(HitLocation,Normal(HitLocation-Other.Location) );
  613.             else if (other != instigator)
  614.                 Explode(HitLocation,Normal(HitLocation-Other.Location) );
  615.         }
  616.     }
  617.     simulated function HitWall (vector HitNormal, actor Wall)
  618.     {
  619.         local vector Vel2D, Norm2D;
  620.  
  621.         bCanHitInstigator = true;
  622.         PlaySound(ImpactSound, SLOT_Misc, 2.0);
  623.         LoopAnim('Spin',1.0);
  624.         if ( (Mover(Wall) != None) && Mover(Wall).bDamageTriggered )
  625.         {
  626.             if ( Role == ROLE_Authority )
  627.                 Wall.TakeDamage( Damage, instigator, Location, MomentumTransfer * Normal(Velocity), MyDamageType);
  628.             Explosion(location);
  629.             return;
  630.         }
  631.         NumWallHits++;
  632.         SetTimer(0, False);
  633.         MakeNoise(0.3);
  634.         if ( NumWallHits > 8 )
  635.             Explosion(location);
  636.             
  637.  
  638.         if ( NumWallHits == 1 ) 
  639.         {
  640.             Spawn(class'WallCrack',,,Location, rotator(HitNormal));
  641.             Vel2D = Velocity;
  642.             Vel2D.Z = 0;
  643.             Norm2D = HitNormal;
  644.             Norm2D.Z = 0;
  645.             Norm2D = Normal(Norm2D);
  646.             Vel2D = Normal(Vel2D);
  647.             if ( (Vel2D Dot Norm2D) < -0.999 )
  648.             {
  649.                 HitNormal = Normal(HitNormal + 0.6 * Vel2D);
  650.                 Norm2D = HitNormal;
  651.                 Norm2D.Z = 0;
  652.                 Norm2D = Normal(Norm2D);
  653.                 if ( (Vel2D Dot Norm2D) < -0.999 )
  654.                 {
  655.                     if ( Rand(1) == 0 )
  656.                         HitNormal = HitNormal + vect(0.05,0,0);
  657.                     else
  658.                         HitNormal = HitNormal - vect(0.05,0,0);
  659.                     if ( Rand(1) == 0 )
  660.                         HitNormal = HitNormal + vect(0,0.05,0);
  661.                     else
  662.                         HitNormal = HitNormal - vect(0,0.05,0);
  663.                     HitNormal = Normal(HitNormal);
  664.                 }
  665.             }
  666.         }
  667.         Velocity -= 2 * (Velocity dot HitNormal) * HitNormal;  
  668.  
  669.     }
  670.     
  671.     simulated function Explosion(vector HitLocation)
  672. {
  673.     local UT_SpriteBallExplosion s;
  674.  
  675.     BlowUp(HitLocation);
  676.     
  677.         if ( Level.NetMode != NM_DedicatedServer )
  678.     {
  679.         spawn(class'Botpack.BlastMark',,,,rot(16384,0,0));
  680.           s = spawn(class'UT_SpriteBallExplosion',,,HitLocation);
  681.         s.RemoteRole = ROLE_None;
  682.     }
  683.      Destroy();
  684. }
  685.  
  686.     
  687.  
  688.     simulated function Timer()
  689.     {
  690.         bCanHitInstigator = true;
  691.     }    
  692. }
  693.  
  694.  
  695. WGU@ P&û,
  696. @½ A?ÆÉ,&╖@Cñ?óUbÇ? tclass asylumbouncers extends fastbouncers;
  697.  
  698. auto state flying
  699. {
  700.  
  701. simulated function HitWall (vector HitNormal, actor Wall)
  702.     {
  703.         local vector Vel2D, Norm2D;
  704.  
  705.         bCanHitInstigator = true;
  706.         PlaySound(ImpactSound, SLOT_Misc, 2.0);
  707.         LoopAnim('Spin',1.0);
  708.         if ( (Mover(Wall) != None) && Mover(Wall).bDamageTriggered )
  709.         {
  710.             if ( Role == ROLE_Authority )
  711.                 Wall.TakeDamage( Damage, instigator, Location, MomentumTransfer * Normal(Velocity), MyDamageType);
  712.             Explosion(location);
  713.             return;
  714.         }
  715.         NumWallHits++;
  716.         SetTimer(0, False);
  717.         MakeNoise(0.3);
  718.         if ( NumWallHits > 15 )
  719.             Explosion(location);
  720.             
  721.  
  722.         if ( NumWallHits == 1 ) 
  723.         {
  724.             Spawn(class'WallCrack',,,Location, rotator(HitNormal));
  725.             Vel2D = Velocity;
  726.             Vel2D.Z = 0;
  727.             Norm2D = HitNormal;
  728.             Norm2D.Z = 0;
  729.             Norm2D = Normal(Norm2D);
  730.             Vel2D = Normal(Vel2D);
  731.             if ( (Vel2D Dot Norm2D) < -0.999 )
  732.             {
  733.                 HitNormal = Normal(HitNormal + 0.6 * Vel2D);
  734.                 Norm2D = HitNormal;
  735.                 Norm2D.Z = 0;
  736.                 Norm2D = Normal(Norm2D);
  737.                 if ( (Vel2D Dot Norm2D) < -0.999 )
  738.                 {
  739.                     if ( Rand(1) == 0 )
  740.                         HitNormal = HitNormal + vect(0.05,0,0);
  741.                     else
  742.                         HitNormal = HitNormal - vect(0.05,0,0);
  743.                     if ( Rand(1) == 0 )
  744.                         HitNormal = HitNormal + vect(0,0.05,0);
  745.                     else
  746.                         HitNormal = HitNormal - vect(0,0.05,0);
  747.                     HitNormal = Normal(HitNormal);
  748.                 }
  749.             }
  750.         }
  751.         Velocity -= 2 * (Velocity dot HitNormal) * HitNormal;  
  752.  
  753.     }
  754.  
  755.  
  756. function BlowUp(vector HitLocation)
  757.     {
  758.         local float damageamount;
  759.         if (numwallhits <10)
  760.             damageamount = 10 * (numwallhits * 2 + 1);
  761.         
  762.         HurtRadius(DamageAmount,150.0, MyDamageType, MomentumTransfer, HitLocation );
  763.         MakeNoise(1.0);
  764.     }
  765. }
  766. [DV╪eD`¢:├╔:$a ╘ "@Aa ª DA┐$a ppp_    [_■   t_    _²   "x√   \_    f_■   y_■   @_    `yⁿ   |yⁿ   s_■   Vr∙   F_    Z@·   wx√   rX∙   IA°   u_²   h@∙   Jy≈   v_²   e_■   Xrφ   a_■   A_■   __■   [X∙   H_■   R@ⁿ   xr⌠   #~█   o⌠    _    Y_²   fRΩ   _■   r_²   b@ⁿ   }y≈   zA⌠   _²   d_    ^_    jzⁿ   ky·   uX∩   qA≈   a_²   ]X≈   n@⌠   lVⁿ   y_    e~╫   kV⌠   A≈   WA≈   LV╢   SA≈   ]zⁿ   {A·   tA·   w@·   f@ⁿ   BA°   vA°   sX≈   cX∙   nX≈   mz╤   d_    }R∙   
  767. _■   zX≈   lX∙   o_²   gR∙   2V┘   VΩ   rΩ   U_²   c@τ   RV┘   8V√   X_■   V╡   _²   iV╚   4~√   _V╫   >V░   è]\F0è[\S0èç\`0èl\m0£RE z0£jE F1è]qR1èçq_1ïü`l1èlqy1è[qF2ïjiS2ïRi`2╪ü| m2¿V y2¿V E3ûAyQ3ïü_J6ûOEW6èRM\9è[Dj9èjMw9èçDE:è]DR:èlD_:@}l:¿jNi<=|v<¿RN r>èRK~>èjLK?ïa_X?èjKe?èRLr?ïR{?ïRUL@çOY@£RG hFèaZtF£jG AGïR^MGïj{ZGïjUgGïj^tGèRuAHïRYNHèRs[HïRhhHèRvuHïQ_BIÜWPIèjv]IèjsjIèjuwIïçjDJï]jQJïjh^JïljkJï[jxJÜWEKïjYRKït__KÜRp mK£îb yKïÄ{ELÜjp RLïâ{^LèÄZkLèâZyL¿UGM%mTMèxZAS╠QgNSïx_\S¿UjS╠tgwSÜSET£kb RT╕Ek^TÜSIVÅ█O4aVVÅ┘TTwWÅ▐Z)Kfá╦%
  768. 9tfèîZmgèkZ{gÅ╤Y8Iháº+Aiáº+liá╨%2+WjÅ║XkBkèWZmqÅ║YkzqO?lex₧^m4A
  769. Qz₧Gm4B5RäÅ╓X8oT╣áZG2+C╗ÜPn╗£ST {╗£bG╝⌐DT╝ïCX└ÜT f└₧m4v$r└ÅRëVhσÅ╤àW~≤Å[àkU⌡£Q@ⁿ£QMⁿ£bZⁿÜtQ gⁿÜPsⁿÜT @²£wT L²ÅQ^4gX²ïC■┤BSM ÅSb)`üÅ╓Y8BIéÜQQ Kâ₧fm4ZWâèROq¥₧~m4~¥èjO}í┤CKJó₧%m4{4Uñ₧vm4}P┘Å▌f>UM▀Å╥Y"bσÅYiDµÅ╥X"mτáX+OΦáY+zΦÅ]åkeΘ₧Om4yP≡áTG
  770. 9I°₧m4uB∙₧m4e(wôÅWåW\╝₧m4s╜ÅXir╪[Public]
  771. Object=(Name=UTPool.CueBallArena,Class=Class,MetaClass=Engine.Mutator,Description="CueBallArena,All weapons and ammo replaced with CueBall!! Asshole in the corner pocket!!!")
  772. Object=(Name=UTPool.Pool,Class=Class,MetaClass=Engine.Mutator,Description="Pool,Thanx to the CueBall u can bounce your rockets around like razor blades! Asshole in the corner pocket!!!)
  773. Object=(Name=UTPool.InsaneAsylum,Class=Class,MetaClass=Engine.Mutator,Description="InsaneAsylum,All weapons and ammo replaced with PsYcHoBaLL!! Inspired by Asylum Escapee. Go CrAzY!!!!")
  774. Object=(Name=UTPool.AsylumPool,Class=Class,MetaClass=Engine.Mutator,Description="AsylumPool, PsYcHoBaLL: Inspired by Asylum Escapee. They are speedier than normal bouncy rockets. With each bounce, their damage is increased. Go CrAzY!!!!")UTPool v200 ReadMe----------------------------------------------------------------------------------
  775.  
  776. - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- 
  777.  
  778. ----------------------------------------------------------------------------------------------------Unzip it to your C:\ (or whatever hardrive your UT folder is on) with use folder names checked. Unless u have the umod version, in which case just run the file...
  779. ----------------------------------------------------------------------------------------------------
  780. Version History
  781. -12/14/99. v100 added cueball and cueball arena
  782. ..
  783. -12/17/99. v150 added PsYcHoBaLL and Insane Asylum. Fixed the blow-up-in-your-face bug.
  784. ..
  785. -12/18/99. v155 added fun ;) by upping the damage done by asylum rockets and bouncers.
  786. ..
  787. --12/18/99. v200 added deathmessages and balanced gameplay with the Asylum mode.
  788. ----------------------------------------------------------------------------------------------------
  789. Version Details:
  790. DeathMessages added.
  791. ----------------------------------------------------------------------------------------------------
  792.  
  793. Special Thanks to:
  794.  
  795. JbP
  796. drunken master
  797. beppo
  798. anyone else from the mutator message board i forgot to mention
  799.     -all for scripting help and inpuy
  800. AsylumEscapee
  801.     -For the great idea
  802. Epic and GT Interactive
  803.     -Making such a cool game
  804.  
  805. ----------------------------------------------------------------------------------------------------
  806. Plans for things to come
  807.  
  808. ...i will probably add an entry to the mod menu allowing you to customize everything (damage, bounces, colors, lights, etc.)
  809. ...in a future version, you might see a "King of the Hill" mode in which there is one PsYcHoBaLL and the rest are CueBalls. the object would be to obtain and control the PsYcHoBaLL (which is better than cueball) to be the king of the hill...
  810. ----------------------------------------------------------------------------------------------------
  811.  
  812. -other Mutators by me-
  813. QuadMod v100
  814.  
  815. ----------------------------------------------------------------------------------------------------
  816. Later All
  817.  
  818.  
  819. {KiX}ProfessorGib
  820. comments, questions, suggestions, ideas, hate mail, or whatever the hell else u can think of to send to me: ian69@home.net  (no viruses or bombs please ;P   )
  821. 12/18/99System\Manifest.ini╨System\Manifest.int╨├System\UTPool.uôuéSystem\UTPool.intçHelp\UTPool200.txt'è2    ú┼πƒYô öB¢U